
package org.sapra.Prefactura;

// <editor-fold defaultstate="collapsed" desc="Dependencias">

import nextapp.echo2.app.Button;
import nextapp.echo2.app.Color.*;
import nextapp.echo2.app.table.TableModel;
import echopointng.BorderEx;
import echopointng.table.DefaultSortableTableModel;
import echopointng.table.SortableTableHeaderRenderer;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Border;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.Component;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.FillImage;
import nextapp.echo2.app.Font;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.ResourceImageReference;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.Table;
import nextapp.echo2.app.TextArea;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.filetransfer.Download;
import nextapp.echo2.app.filetransfer.DownloadProvider;
import nextapp.echo2.app.layout.TableLayoutData;
import nextapp.echo2.app.list.DefaultListModel;
import nextapp.echo2.app.table.DefaultTableCellRenderer;
import nextapp.echo2.app.table.DefaultTableModel;
import nextapp.echo2.app.table.TableCellRenderer;
import nextapp.echo2.webcontainer.command.BrowserOpenWindowCommand;
import nextapp.echo2.webrender.WebRenderServlet;
import org.sapra.abc.dPracticante;
import org.sapra.dao.Abono_AdeudoMO;
import org.sapra.dao.EMailMO;
import org.sapra.dao.Empresa;
import org.sapra.dao.Factura;
import org.sapra.dao.Periodo;
import org.sapra.dep.CalendarioFacturacion;
import org.sapra.dep.EmpresaMO;
import org.sapra.dep.Practicante;
import org.sapra.dep.Usuario;
import org.sapra.dep.conexion.DAC_Ext;
import org.sapra.dep.conexion.DAC_Insert;
import org.sapra.dep.conexion.DBWRAP;
import org.sapra.dep.echo.CambioFecha.Aviso;
//import org.sapra.echo.AjustesWindow;
import org.sapra.echo.Helpers;
//import org.sapra.echo.wAviso;
import org.sapra.echo.wAviso;
import org.sapra.logon.dLogin;
import org.sapra.main.vPrincipal;

// </editor-fold>


/**
 * Generated Echo form template
 * 
 * @author ppratsc
 */
public class DisplayPane extends nextapp.echo2.app.ContentPane {

    // <editor-fold defaultstate="collapsed" desc="Controles">
    private Column m_ColHeader, m_ColContent,m_ColLogo;
    private Row m_RowMainmenu, m_RowSubmenu1, m_RowSubmenu2;
    private Button m_BtnSalir, m_BtnUpdate, m_BtnSiga, m_BtnAutorizar, m_BtnAjustar;
    private Button m_BtnDeducir, m_BtnAlta, m_BtnBuscar, m_BtnBaja, m_BtnEditar, b_seguro;
    private Button m_BtnRenovar, m_BtnCancelar, m_BtnImprimir, m_BtnCSV, m_BtnMail;
    private Button m_BtnEmpresa, m_BtnCatalogos,m_BtnDepto,m_BtnCCosto,m_BtnReport;
    private SelectField m_SelPeriodos, m_SelEmpresa;
    private TextField m_TxtBuscar;
    private Table m_table1, m_table2;
    private Label m_LabEmpresa, m_LabUsuario, m_LabStatus, m_LabConvenios, m_LabFecha;
    private Label m_LabVista;
    // </editor-fold>

    // <editor-fold desc="Variables de Cache">
    private PrefacturaMO pmodel;
    private final short VISTA_PRACTICANTES = 0;
    private final short VISTA_PREFACTURA = 1;
    private short m_bVista = VISTA_PREFACTURA; // Vista Prefactura por Default
    private DBWRAP pdb;
    private Usuario m_usuario;
    private ArrayList<EmpresaMO> listaEmpresa=new ArrayList<EmpresaMO>();
    Periodo m_periodo;
    private int EmpresaId=0;
    private int universalOpc=0;
    private WindowPane universal=new WindowPane();
    private vPrincipal princ;

    //para el fondo de los botones (opcional)
    static String DIR_IMAGEN="org/sapra/echo/image/";
    // </editor-fold>
    
    public DisplayPane(vPrincipal princ) {
        super();
        this.princ=princ;
        princ.getMenu();
        initComponents();
        
    }

        public DisplayPane(DBWRAP db) {
        super();
        pdb = db;
        initComponents();

    }

    // <editor-fold defaultstate="collapsed" desc="Echo2 Helpers">
    //Genera un Boton
    Button ButtonHelper(String text,Component parent,ActionListener action){

        Button resp = new nextapp.echo2.app.Button(text);
        resp.setStyleName("Default");
        resp.setTextAlignment(new nextapp.echo2.app.Alignment(Alignment.CENTER,Alignment.CENTER));
        resp.setTextPosition(new nextapp.echo2.app.Alignment(Alignment.CENTER,Alignment.CENTER));
        resp.setBackgroundImage(new FillImage(new ResourceImageReference(DIR_IMAGEN+"fondo_titulo2.png")));
        resp.addActionListener(action);
        parent.add(resp);

        return resp;
    }

    //Genera un SplitPanel
    SplitPane SplitPaneHelper(int orient,Extent ext,boolean resize,Component parent){
        SplitPane resp = new nextapp.echo2.app.SplitPane();
        resp.setOrientation(orient);
        resp.setResizable(resize);
        resp.setSeparatorPosition(ext);
        resp.setSeparatorColor(Color.BLACK);
        parent.add(resp);

        return resp;
    }
    Label LabelHelper(String text,Color color,Component parent){
        Label resp = new Label(text);
        if(color != null) resp.setForeground(color);
        parent.add(resp);
        return resp;
    }

    Row RowHelper(String style,Extent ext,Component parent){
        Row resp = new nextapp.echo2.app.Row();
        resp.setStyleName(style);
        resp.setCellSpacing(ext);
        parent.add(resp);
        return resp;
    }
    Column ColumnHelper(String style,Extent ext,Component parent){
        Column resp = new nextapp.echo2.app.Column();
        resp.setStyleName(style);
        resp.setCellSpacing(ext);
        parent.add(resp);
        return resp;
    }// </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Inicializacion de Componentes">
    private void initComponents() {

        Column col1 = Helpers.Column("Default", new Extent(5), this);
        Row menu=Helpers.Row("Default", new Extent(5), col1);
        menu.add(princ.getMenu());
        menu.setAlignment(Alignment.ALIGN_CENTER);
        Row linea1,linea2,linea3,linea4,linea5, Rowmenu;
        Rowmenu=Helpers.Row("Default", new Extent(5), col1);
        Rowmenu=princ.getMenu();
        linea1=Helpers.Row("Default", new Extent(5), col1);
        m_LabStatus     = LabelHelper("STATUS: N/D",new Color(0x011dac),linea1);
        m_LabFecha      = LabelHelper("FECHA:",new Color(0x011dac),linea1);
        m_LabConvenios  = LabelHelper("CONVENIOS: N/D",new Color(0x011dac),linea1);
        m_LabVista    = LabelHelper("VISTA: PREFACTURA",new Color(0x011dac),linea1);

        linea1.setAlignment(Alignment.ALIGN_CENTER);
        linea1.setCellSpacing(new Extent(15));
        linea1.setFont(new Font(Font.ARIAL, 2, new Extent(15)));

        linea2=Helpers.Row("Default", new Extent(5), col1);
        LabelHelper("PERIODOS: ",new Color(0x011dac),linea2);
        linea2.add((m_SelPeriodos = new SelectField())); // Combo Periodos
        m_SelPeriodos.setToolTipText("Selecciona El Periodo y \n Da Click en el Boton IR");
        m_BtnUpdate     = ButtonHelper(" IR ",linea2,new ActionListener(){public void actionPerformed(ActionEvent evt){MenuUpdate(evt);}});
       m_BtnUpdate.setToolTipText("Ver la Prefactura del Periodo Seleccionado");
        linea2.setAlignment(Alignment.ALIGN_CENTER);
        Row linea2_1=Helpers.Row("Default", new Extent(5), col1);
         m_BtnAjustar    = ButtonHelper("AJUSTAR",linea2_1,new ActionListener(){public void actionPerformed(ActionEvent evt){MenuAjustar(evt);}});
        m_BtnDeducir    = ButtonHelper("DEDUCIR",linea2_1,new ActionListener(){public void actionPerformed(ActionEvent evt){MenuDeducir(evt);}});
        m_BtnEditar = ButtonHelper("ABONO EMPRESA",linea2_1,new ActionListener(){public void actionPerformed(ActionEvent evt){

                    universal=new WindowPane();
                    universal=propertyWindow(700,500,60,30,"ABONO EMPRESA");
                    universal.setClosable(false);
                    OpcionFactura=2;
                    ContentPane panel=Posicion();

                    universalOpc=1;

            if(pmodel.isCerrada()==false){
                panel.setEnabled(true);
                universal.setClosable(false);
            }
            else{
                  panel.setEnabled(false);
                universal.setClosable(true);
            }
             universal.add(panel);
             add(universal);


        }});
        m_BtnReport = ButtonHelper("ADEUDO EMPRESA",linea2_1,new ActionListener(){public void actionPerformed(ActionEvent evt){

                    universal=new WindowPane();
                    universal=propertyWindow(700,500,60,30,"ADEUDO EMPRESA");
                    universal.setClosable(false);
                    OpcionFactura=1;
                    ContentPane panel=Posicion();
                    //universal.add(panel);
                    universalOpc=1;

            if(pmodel.isCerrada()==false){
                panel.setEnabled(true);
                universal.setClosable(false);
            }
            else{
                panel.setEnabled(false);
                universal.setClosable(true);
            }
             universal.add(panel);
              add(universal);
        }});

        ///BOTON DE AGREGAR O QUITAR SEGURO
        if(dLogin.getUser().getTipoUsuario().equals("A")){
        b_seguro=ButtonHelper("AGREGAR/QUITAR SEGURO",linea2_1,new ActionListener(){public void actionPerformed(ActionEvent evt){ menuSeguros(evt);}});}
        ////////////////////////////////////////////////////////////////////////////////
        linea2_1.setAlignment(Alignment.ALIGN_CENTER);
        linea2_1.setCellSpacing(new Extent(15));
        linea3=Helpers.Row("Default", new Extent(5),col1);
        linea3.setAlignment(Alignment.ALIGN_CENTER);
        m_table1=Helpers.Tabla();
        /*m_table1 = new Table();
        m_table1.setStyleName("Default");
        m_table1.setHeaderVisible(true);
        m_table1.setBorder(BorderEx.DEFAULT);
        m_table1.setBackground(Color.WHITE);
        m_table1.setSelectionEnabled(true);
        m_table1.setSelectionBackground(Color.BLUE);
        m_table1.setRolloverBackground(Color.YELLOW);
        m_table1.setRolloverEnabled(true);*/
        //m_table1.setDefaultRenderer(Object.class,new TableCell());
        linea3.add(m_table1);

        linea4=Helpers.Row("Default", new Extent(5),col1);
        m_table2 = new Table();
        m_table2.setStyleName("Default");
        m_table2.setBorder(BorderEx.DEFAULT);
        m_table2.setBackground(Color.WHITE);
        m_table2.setDefaultRenderer(Object.class,new TableCell());
        m_table2.setDefaultHeaderRenderer(new HeaderTable());
        linea4.add(m_table2);

        linea5=Helpers.Row("Default", new Extent(5),col1);

        m_BtnAutorizar  = ButtonHelper("AUTORIZAR",linea5,new ActionListener(){public void actionPerformed(ActionEvent evt){MenuAutorizar(evt);}});
        m_BtnImprimir   = ButtonHelper("IMPRIMIR",linea5,new ActionListener(){public void actionPerformed(ActionEvent evt){MenuImprimir(evt);}});
        m_BtnMail       = ButtonHelper("EMAIL",linea5,new ActionListener(){public void actionPerformed(ActionEvent evt){dummy(evt);}});
        m_BtnCSV        = ButtonHelper("CSV/EXCEL",linea5,new ActionListener(){public void actionPerformed(ActionEvent evt){MenuCSV(evt);}});
        m_BtnCancelar   = ButtonHelper("CANCELAR",linea5,new ActionListener(){public void actionPerformed(ActionEvent evt){MenuCancelar(evt);}});       
        //Inicializa la Pantalla*/
        m_BtnMail.setVisible(false);
        fillinitialData();

        return;

    }// </editor-fold>



        public WindowPane propertyWindow(int width,int height,int posX,int posY,String title){
        WindowPane w=new WindowPane();
        w.setWidth(new Extent(width));
        w.setHeight(new Extent(height));
        w.setPositionX(new Extent(posX));
        w.setPositionY(new Extent(posY));
        w.setTitle(title);
        w.setMovable(false);
        w.setResizable(false);
        return w;
    }
    private void fillinitialData() {

        pmodel = new PrefacturaMO(); // Crea la Vista Prefactura
        //pmodel2 = new ModelPracticantes(pdb) // Crea la Vista Practicantes
        
        UpdateView(true); // Abre la vista por default y indica que es la primera vez
    }

    private void SetViewPermissions(String tipo,boolean calendar,boolean abierta) {

        SetViewDenyall();

        m_BtnUpdate.setEnabled(true);

        // Botones para Administradores

        if(calendar){ //Si hay calendario de Facturacion

            //Botones Default de la Prefactura
            m_SelPeriodos.setEnabled(true);
            m_BtnImprimir.setEnabled(true);
            m_BtnCSV.setEnabled(true);

            if(abierta){
                // Si la Prefactura esta Abierta

               if(tipo.equals("A")){
                        m_BtnAutorizar.setEnabled(true);
                        m_BtnDeducir.setEnabled(true);
                        m_BtnEditar.setEnabled(true);
                        m_BtnReport.setEnabled(true);
                        m_BtnCancelar.setEnabled(false);
                        m_BtnAjustar.setEnabled(true);
                        b_seguro.setEnabled(true);

                        m_BtnAutorizar.setVisible(true);
                        m_BtnDeducir.setVisible(true);
                        m_BtnEditar.setVisible(true);
                        m_BtnReport.setVisible(true);
                        m_BtnCancelar.setVisible(false);
                        m_BtnAjustar.setVisible(true);
                        b_seguro.setVisible(true);

               }else{
                        m_BtnAutorizar.setEnabled(true);
                        m_BtnDeducir.setEnabled(false);
                        m_BtnEditar.setEnabled(false);
                        m_BtnReport.setEnabled(false);
                        m_BtnCancelar.setEnabled(false);
                        m_BtnAjustar.setEnabled(true);
                        b_seguro.setEnabled(false);

                        m_BtnAutorizar.setVisible(true);
                        m_BtnDeducir.setVisible(false);
                        m_BtnEditar.setVisible(false);
                        m_BtnReport.setVisible(false);
                        m_BtnCancelar.setVisible(false);
                        m_BtnAjustar.setVisible(true);
                        b_seguro.setVisible(false);
               }
            }else {
                if(tipo.equals("A")){
                        m_BtnAutorizar.setEnabled(false);
                        m_BtnDeducir.setEnabled(false);
                        m_BtnEditar.setEnabled(false);
                        m_BtnReport.setEnabled(false);
                        m_BtnCancelar.setEnabled(true);
                        m_BtnAjustar.setEnabled(false);
                        b_seguro.setEnabled(false);
                        

                        m_BtnAutorizar.setVisible(false);
                        m_BtnDeducir.setVisible(false);
                        m_BtnEditar.setVisible(false);
                        m_BtnReport.setVisible(false);
                        m_BtnCancelar.setVisible(true);
                        m_BtnAjustar.setVisible(false);
                        b_seguro.setVisible(false);
                        
               }else{
                        m_BtnAutorizar.setEnabled(false);
                        m_BtnDeducir.setEnabled(false);
                        m_BtnEditar.setEnabled(false);
                        m_BtnReport.setEnabled(false);
                        m_BtnCancelar.setEnabled(false);
                        m_BtnAjustar.setEnabled(false);
                        b_seguro.setEnabled(false);

                        m_BtnAutorizar.setVisible(false);
                        m_BtnDeducir.setVisible(false);
                        m_BtnEditar.setVisible(false);
                        m_BtnReport.setVisible(false);
                        m_BtnCancelar.setVisible(false);
                        m_BtnAjustar.setVisible(false);
                        b_seguro.setVisible(false);

               }
            }
        }
    }

    private void SetViewDenyall() {
        m_BtnUpdate.setEnabled(false);
        m_SelPeriodos.setEnabled(false);
        m_BtnAutorizar.setEnabled(false);
        m_BtnAjustar.setEnabled(false);
        m_BtnDeducir.setEnabled(false);
        m_BtnCancelar.setEnabled(false);
        m_BtnImprimir.setEnabled(false);
        m_BtnCSV.setEnabled(false);
        m_BtnMail.setEnabled(false);

    }
    
    @SuppressWarnings("static-access")
    public void UpdateView(boolean start){
        // Consulta de Usuario y Empresa

        org.sapra.dao.Usuario us=dLogin.getUser();
        Empresa empresa1=dLogin.getEmpresa();
        String empresa =""+empresa1.getEmpresaId();
        if(us == null || empresa1 == null){
            // Hay un problema al Cargar
            // Avisar al Usuario
            SetViewDenyall();
            m_BtnSalir.setEnabled(true); // Solo deja salir al "Usuario"
            add(new Aviso("ERROR CRITICO","Error de Acceso al Sistema"));
            return;
        }

        // La fecha del dia de Hoy
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",new Locale("es"));
        m_LabFecha.setText("FECHA: " + sdf.format(new Date()));

        // Rellena el Label del Usuario y su Roll
        m_usuario = pmodel.getUsuario(us.getUsuarioId());

        String usuario = "USUARIO: " +  m_usuario.nombre;
        if(us.getTipoUsuario().equals("A"))usuario += "  (Admin)"; // Si es Admin lo indica
        //m_LabUsuario.setText(usuario);

        // Rellena el Combo de Empresas
        DefaultListModel lme = new DefaultListModel();
        String nempresa = pmodel.getEmpresaName(Integer.parseInt(empresa));
        lme.add(nempresa);
        
        // Rellena el combo de Periodos
        
        List<Periodo> periodos = pmodel.getPeriodos(Integer.parseInt(empresa),0,null);

        if(periodos.isEmpty()) {
            add(new Aviso("ADVERTENCIA","La empresa no tiene asociados calendarios de facturacion"));
            SetViewPermissions(m_usuario.tipo,false,false);
            return;
        }

        DefaultListModel lm = new DefaultListModel();
        for(Iterator it = periodos.iterator();it.hasNext();)
        {
            Periodo periodo = (Periodo) it.next();
            lm.add(periodo);
        }
        m_SelPeriodos.setModel(lm);
        
        // ¿Se esta iniciando?
        Periodo periodo = (Periodo) m_SelPeriodos.getSelectedItem();

        if(start) {
            //Busca el Periodo Actual y lo Selecciona
            int max=lm.size();

            long now,ini,fin,lim;
            Date today = new Date();
            now = today.getTime();
            Date fec_lim_Anterior=new Date();
            long anterior=fec_lim_Anterior.getTime();
            for(int i=0;i < max;i++){
                periodo = (Periodo) lm.get(i);
                ini = periodo.ini.getTime();
                fin = periodo.fin.getTime() + (1000*60*60*24); // Se suma un dia
                lim=periodo.dia_limite.getTime()+ (1000*60*60*24);
                if(i==0){
                    if(now<lim){
                         m_SelPeriodos.setSelectedItem(periodo);
                         break;
                    }else{
                        anterior=lim;
                    }
                }else{
                    if(now>anterior && now<lim){
                        m_SelPeriodos.setSelectedItem(periodo);
                        break;
                    }else{
                        anterior=lim;
                    }

                }

                if( now <= lim ){
                    if(now >= ini){
                        //Encontramos el Periodo
                        m_SelPeriodos.setSelectedItem(periodo);
                        break;
                    }

                }
            }
        }
        
        if(periodo == null){
            add(new Aviso("ADVERTENCIA","Por favor seleccione un Periodo"));
            return;
        }
        m_periodo = periodo; // Guarda el Periodo Actual

        // Genera la Vista
        if(m_bVista == VISTA_PREFACTURA){
            TableModel tm = pmodel.InitFactura(dLogin.getEmpresa(),periodo);
            if(tm != null){
                m_table1.setModel(tm);
                m_table1.setDefaultHeaderRenderer(new HeaderTable());
                m_table1.setDefaultRenderer(Object.class,new TableCell());
                //m_table1.setDefaultRenderer(Object.class, new TableCell());
            }
           
            TableModel tmt = pmodel.getTotales();
            if(tmt != null)m_table2.setModel(tmt);
            //m_table2.setDefaultRenderer(Object.class,new TableCell());

            //Estado de la Prefactura
            String str = "ESTADO: ";
            str += (pmodel.isCerrada())?" AUTORIZADA ("+pmodel.Autorizo()+")":" ABIERTA";
            m_LabStatus.setText(str);

            // Informa el Numero de Convenios en Pantalla
            DefaultTableModel tb = (DefaultTableModel) m_table1.getModel();
            str = "CONVENIOS: " + tb.getRowCount();
            m_LabConvenios.setText(str);
            if(tm != null){
                m_table1.setDefaultHeaderRenderer(new SortableTableHeaderRenderer());
                DefaultSortableTableModel model = new DefaultSortableTableModel(m_table1.getModel());
                m_table1.setModel(model);
            }
            SetViewPermissions(m_usuario.tipo,true,!pmodel.isCerrada());

        }else if (m_bVista == VISTA_PRACTICANTES){
            // Avisar que la vista no esta Implementada
            add(new Aviso("ADVERTENCIA","Vista NO implmentada"));
        }

        

        
    }


    public void MenuSalir(ActionEvent evt)
    {
        try {
            HttpServletRequest sreq = WebRenderServlet.getActiveConnection().getRequest();
            String hostname = sreq.getServerName().toLowerCase();
            int hostport = sreq.getServerPort();
            //AppSAPRA.getActive().enqueueCommand(new BrowserRedirectCommand("http://"+hostname+":"+hostport+"/main.jsp"));
            //AppSAPRA.getActive().getDefaultWindow().setContent(new DisplayPane(pdb));
            //AppSAPRA;
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        //Regresa a la Aplicacion Anterior
        
    }
    public void MenuUpdate(ActionEvent evt)
    {
        UpdateView(false);
    }

    public void MenuAutorizar(ActionEvent evt)
    {
        if(m_table1.getModel().getRowCount() == 0) {
            add(new Aviso("ADVERTENCIA","El periodo no tiene practicantes para PAGAR"));
            return;
        }

        if(pmodel.getSubTotal() < 1)
        {
            add(new Aviso("ADVERTENCIA","No puede cerrar una prefactura que NO pague minimo 1 Peso"));
            return;

        }

        //Solo se puede Autorizar el periodo Actual
        long inicio = m_periodo.ini.getTime();
        long fin = m_periodo.fin.getTime();
        long hoy = new Date().getTime();
        CalendarioFacturacion pruebaObjeto=new CalendarioFacturacion(m_periodo.index);
        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
        Date prueba=new Date();
        try {
             prueba=formatoDelTexto.parse(pruebaObjeto.getDia_limite_aut_fac());
        } catch (Exception e) {
            e.printStackTrace();

        }/*
        long limite=prueba.getTime();
        if(hoy>m_periodo.dia_limite.getTime()){
                if(!m_usuario.tipo.equals("A"))
            {
                // Usuario Normal, NO lo deja Autorizar
                add(new Aviso("ADVERTENCIA","Solo se puede Autorizar el Periodo Actual"));
                return;
            }
        }*/
        /*
        if( (inicio > hoy) || (hoy > fin))
        {
            // La prefactura se encuentra fuera del periodo de Permitido para Autorizar
            if(!m_usuario.tipo.equals("A"))
            {
                // Usuario Normal, NO lo deja Autorizar
                add(new Aviso("ADVERTENCIA","Solo se puede Autorizar el Periodo Actual"));
                return;
            }

        }
        */
        //Revisar si hay practicantes por vencer
        String vencido=pmodel.isVencidos();
        if(vencido != null)
        {
            add(new Aviso("ADVERTENCIA","El practicante " + vencido +
                    " vence en este periodo, por favor renueve su convenio o " +
                    "confirme la baja"));
            return;
        }

        //MXCN05 -> Si el NETO es menor a cero, No deja cerrar la prefactura
        String negativo=pmodel.isNetoNegativo();
        if(negativo != null)
        {
            add(new Aviso("ADVERTENCIA","El practicante " + negativo +
                    " tiene un NETO Negativo por favor Ajuste "));
            return;
        }

        /*
         * //Segun Carolina NO deben de estar todas las cuentas para poder cerrar la prefactura
        if( pmodel.isFaltanCuentas() )
        {
            add(new Aviso("ADVERTENCIA","No se puede cerrar una Prefactura si " +
                    "alguno de los practicantes NO tiene cuenta de banco"));
            return;
        }*/


        if(!pmodel.Autorizar(m_usuario,m_periodo)){
            add(new Aviso("ERROR","Error al Autorizar Factura"));
            return;
        }

        if(m_usuario.tipo.equals("A") && ( (inicio > hoy) || (hoy > fin)) ){
            add(new Aviso("ADVERTENCIA","PREFACTURA AUTORIZADA COMO ADMINISTRADOR " +
                    "PARA UN PERIODO NO PERMITIDO PARA EL USUARIO"));
        }else{
            add(new Aviso("AVISO","¡PREFACTURA AUTORIZADA!"));
        }

        EMailMO mail=new EMailMO();
        String EmpresaName=pmodel.getEmpresaName(pmodel.getM_empresa());
        //mail.envioFactura(pmodel,"AUTORIZACION-PREFACTURA: " + EmpresaName ,true);
        
        UpdateView(false);
    }

    public void MenuAjustar(nextapp.echo2.app.event.ActionEvent evt)
    {
        //Ajustar
        int index = m_table1.getSelectionModel().getMinSelectedIndex();

        //Ajuste normal
        if(index >= 0){
            Practicante p = pmodel.getPracticante(index);
            //Abre la Ventana para realizar los Ajustes
            String nc = p.nombre +" " +p.paterno +" "+ p.materno;
            add(new wAjustes(this,m_periodo,false,nc,p,m_usuario));
        }else {
            if(m_table1.getModel().getRowCount() == 0) {
                add(new Aviso("ADVERTENCIA","No Existen Practicantes Vigentes"));
            }else {
                add(new Aviso("ADVERTENCIA","Por favor seleccione un Practicante"));
            }

        }
    }

    public void MenuDeducir(nextapp.echo2.app.event.ActionEvent evt)
    {
        //Deduccion
        int index = m_table1.getSelectionModel().getMinSelectedIndex();

        if(index >= 0){
            Practicante p = pmodel.getPracticante(index);
            //Abre la Ventana para realizar las deducciones
            String nc = p.nombre +" " +p.paterno +" "+ p.materno;
            add(new wAjustes(this,m_periodo,true,nc,p,m_usuario));
        }else {
            if(m_table1.getModel().getRowCount() == 0) {
                add(new Aviso("ADVERTENCIA","No Existen Practicantes Vigentes"));
            }else {
                add(new Aviso("ADVERTENCIA","Por favor seleccione un Practicante"));
            }

        }
    }

    public void menuSeguros(ActionEvent e){
         int index = m_table1.getSelectionModel().getMinSelectedIndex();
         boolean res1;
         Practicante p=new Practicante();

        if(index >= 0){
             p = pmodel.getPracticante(index);
        }else {
            if(m_table1.getModel().getRowCount() == 0) {
                add(new Aviso("ADVERTENCIA","No Existen Practicantes Vigentes"));
            }else {
                add(new Aviso("ADVERTENCIA","Por favor seleccione un Practicante"));
            }

        }

         String salida="";

         if(p.polizaEmpresa!=0||p.polizaPracticante!=0){
             int res=dPracticante.UpdateSeguro(p.id, true, m_periodo.index);
             if(res!=0){
                 add(new wAviso("EXITO","OPERACION REALIZADA SATISFACTORIAMENTE"));
             }
             else{
                 add(new wAviso("ERROR","OPERACION CANCELADA"));
             }
         }else{
             int res=dPracticante.UpdateSeguro(p.id, false, m_periodo.index);
             if(res!=0){
                 add(new wAviso("EXITO","OPERACION REALIZADA SATISFACTORIAMENTE"));
             }
             else{
                 add(new wAviso("ERROR","OPERACION CANCELADA"));
             }

         }
    }

    public void MenuSiga(ActionEvent evt)
    {
        //Abre la Ventana del SIGA
      /*  WindowPane wSiga = new WindowPane();
        wSiga.setTitle("BANORTE SIGA");
        wSiga.setModal(true);
        wSiga.setClosable(true);
        wSiga.setWidth(new Extent(900,Extent.PX));
        wSiga.setHeight(new Extent(500,Extent.PX));

//        SigaContentPane sigacontentpane = new SigaContentPane();
        wSiga.add(sigacontentpane);
        sigacontentpane.setTableModel();

        add(wSiga);
    */}


    public void dummy(ActionEvent evt){
        add(new Aviso("ADVERTENCIA","Funcion NO Implementada!"));
    }

    public void MenuCancelar(ActionEvent evt)
    {
            pmodel.Cancelar(m_periodo);
            ArrayList<Integer> ids=DAC_Ext.ListaPoliza(m_periodo);
            for(int i=0;i<ids.size();i++){
                    int id=(Integer)ids.get(i);
                    DAC_Ext.UpdPolizaSeguro(m_periodo, false,id);
            }
            EMailMO mail=new EMailMO();
            String EmpresaName=pmodel.getEmpresaName(pmodel.getM_empresa());
            //mail.envioFactura(pmodel,"PREFACTURA-CANCELACION: " + EmpresaName ,false);
            UpdateView(false);
    }

    public void MenuImprimir(ActionEvent evt)
    {
        //Impresion
        if(m_table1.getModel().getRowCount() == 0){
            add(new Aviso("ADVERTENCIA","No Existen Practicantes Vigentes"));
            return;
        }
        
        if(m_periodo == null){
            add(new Aviso("ADVERTENCIA","Por favor Seleccione un Periodo"));
            return;
        }
        try {
            HttpSession session = WebRenderServlet.getActiveConnection().getRequest().getSession();
            String sp = Integer.toString(m_periodo.index);
            session.setAttribute("_idperiodo",sp);
            ApplicationInstance.getActive().enqueueCommand(new BrowserOpenWindowCommand("http://www.administraciondepracticantes.com/Zaprax/ServletPoliza","",""));//"http://"+hostname+":"+hostport+"/ServletPoliza","",""));
            //ApplicationInstance.getActive().enqueueCommand(new BrowserOpenWindowCommand("http://localhost:8084/Zaprax/ServletPoliza","",""));//"http://"+hostname+":"+hostport+"/ServletPoliza","",""));
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }

    public void MenuCSV(nextapp.echo2.app.event.ActionEvent evt)
    {
        //CSV
        Factura fac;
        if(m_table1.getModel().getRowCount() == 0){
            add(new Aviso("ADVERTENCIA","No Existen Practicantes Vigentes"));
            return;
        }

        if(m_periodo == null){
            add(new Aviso("ADVERTENCIA","Por favor Seleccione un Periodo"));
            return;
        }
        List<Practicante> m_pract=pmodel.getM_practicantes();
        DecimalFormat nf = new DecimalFormat("## ### ###.00");
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MMM-dd",new Locale("es"));
        try {
             //FileWriter nuevo=new FileWriter("/home/cobain/Escritorio/Nuevo.csv");
             FileWriter nuevo=new FileWriter("/opt/innoapps/ALT/Nuevo.csv");

            nuevo.write(" \nEmpresa: ,"+dLogin.getEmpresa().getRazon_empresa());
            nuevo.write(" \nRazon Factura: ,"+dLogin.getEmpresa().getRazon_factura());
            nuevo.write(" \nPeriodo :,"+m_periodo.toString());
            String titulo="\n#,CUENTA,NETO,NOMBRE COMPLETO,CCOSTO,DEPARTAMENTO,FECHA DE INICIO,FECHA DE TERMINO,"
                    + "FECHA BAJA,APORTACION MENSUAL,DIAS A PAGAR,AJUSTES,"
                    + "SEGURO EMPRESA,SEGURO PRACTICANTE,DEDUCCIONES,MONTO A PAGAR,GA,SUBTOTAL,IVA,TOTAL PRACTICANTE";
            nuevo.write(titulo);
             double foot_neto=0;
             double foot_segEmp=0;
             double foot_ajuste=0;
             double foot_setPrac=0;
             double foot_deduc=0;
             double foot_mont_pagar=0;
             double foot_ga=0;
             double foot_subtot=0;
             double foot_iva=0;
             double foot_totalp=0;
            for(int i=0;i<m_pract.size();i++){
                Practicante p = (Practicante)m_pract.get(i);
                String linea="\n"+(i+1)+",";
                if(p.cuenta==null)
                    linea+=" N/D,";
                else
                    linea+=""+p.cuenta+",";
                linea+=""+nf.format(p.neto)+",";
                foot_neto+=p.neto;
                linea+=p.nombre+" "+p.paterno+" "+p.materno;

                 if(p.centro==null || p.centro.trim().equals(""))
                    linea+=" ,N/D,";
                else
                    linea+=","+p.centro+",";

                linea+=p.departamento+",";
                linea+=df.format(p.fechaInicio)+",";
                linea+=df.format(p.fechaTermino)+",";

                if(p.fechaCancelacion!=null)
                    linea+=df.format(p.fechaCancelacion)+",";
                else
                    linea+="N/D,";
                linea+=""+nf.format(p.sueldo)+",";
                linea+=""+p.dias+",";
                linea+=""+nf.format(p.ajuste)+",";
                foot_ajuste+=p.ajuste;
                linea+=""+nf.format(p.polizaEmpresa)+",";
                foot_segEmp+=p.polizaEmpresa;
                linea+=""+nf.format(p.polizaPracticante)+",";
                foot_setPrac+=p.polizaPracticante;
                linea+=""+nf.format(p.deduccion);
                foot_deduc+=p.deduccion;
                ///VARIABLE PARA CALCULAR LA SUMA TOTAL_PRACTICANTE
                double subt_w;
                
                linea+=","+nf.format(p.apagar)+",";
                foot_mont_pagar+=p.apagar;
                double ga=p.apagar*pmodel.getComision();
                foot_ga+=ga;
                linea+=nf.format(ga)+",";
                if(p.polizaPracticante==0){
                 subt_w=p.apagar+ga+p.polizaEmpresa;}
                    else {
                     subt_w=p.apagar+ga;}//subtotal}
                foot_subtot+=subt_w;
                linea+=nf.format(subt_w)+",";
                double iva_w=subt_w * .16;
                foot_iva+=iva_w;
                linea+=nf.format(iva_w)+",";
                double total_w=subt_w+iva_w;
                foot_totalp+=total_w;
                linea+=nf.format(total_w)+"";
                nuevo.write(linea);
            }
             nuevo.write("\n");
             nuevo.write(" , ,"+foot_neto+",,,,,,,,,"+foot_ajuste+","+foot_segEmp+","+foot_setPrac+""
                     + ","+foot_deduc+","+foot_mont_pagar+","+foot_ga+","+foot_subtot+","+foot_iva+","+foot_totalp);
            nuevo.write("\n");
            nuevo.write("\n");
            double subTotFin=pmodel.getTotal1()-pmodel.getAbonoTotal();
            nuevo.write("  \nConcepto  ,  Monto  ");
            nuevo.write(" \nMonto a Pagar , $"+nf.format(pmodel.getTotalApagar()));
            nuevo.write(" \n"+pmodel.getComision()*100+"% G.A , $ "+nf.format(pmodel.getAdmGasto()));
            nuevo.write(" \nSubTotal Sin Seguro , $ "+nf.format(pmodel.getSubTotalSS()));
            nuevo.write(" \nSeguro Empresa , $ "+nf.format(pmodel.getTotalSeguroEmpresa()));
            nuevo.write(" \nAdeudos Empresa , $ "+nf.format(pmodel.getAdeudoTotal()));
            nuevo.write(" \nSubTotal con Seguro , $ "+nf.format(pmodel.getM_SubTotal()));
            nuevo.write(" \nI.V.A , $ "+nf.format(pmodel.getIva()));
            nuevo.write(" \nTotal1 , $ "+nf.format(pmodel.getTotal1()));
            nuevo.write(" \nAbono Empresa , $ "+nf.format(pmodel.getAbonoTotal()));
            nuevo.write(" \nSubTotal con Abonos , $ "+nf.format(subTotFin/1.16));
            nuevo.write(" \nI.V.A. , $ "+nf.format((subTotFin/1.16)*.16));
            nuevo.write(" \nTotal Final , $ "+nf.format(subTotFin));
            nuevo.close();
            //File f=new File("/home/cobain/Escritorio/Nuevo.csv");
            File f=new File("/opt/innoapps/ALT/Nuevo.csv");
            final byte[] content = new byte[(int) f.length()];
            FileInputStream inputStream = new FileInputStream(f);
            inputStream.read(content);
            inputStream.close();
            final String fname=f.getName();
            Download archivo=new Download();
                            archivo.setProvider(new DownloadProvider() {

                                public String getContentType() {
                                            return ".csv";
                                        }

                                        public String getFileName() {
                                            return "Prefactura_"+m_periodo.toString()+".csv";
                                        }

                                        public int getSize() {
                                            return 0;
                                        }

                                        public void writeFile(OutputStream out) throws IOException {
                                            out.write(content);
                                        }
                                    });
        f.delete();
        archivo.setActive(true);
        ApplicationInstance app = ApplicationInstance.getActive();
        app.getActive().enqueueCommand(archivo);


        } catch (Exception e) {
            e.printStackTrace();
        }

        HttpSession session = WebRenderServlet.getActiveConnection().getRequest().getSession();
        String sp = Integer.toString(m_periodo.index);
        session.setAttribute("_idperiodo",sp);
        session.setAttribute("_bscreen", "0");

        HttpServletRequest sreq = WebRenderServlet.getActiveConnection().getRequest();
        String hostname = sreq.getServerName().toLowerCase();
        int hostport = sreq.getServerPort();
        

//        AppSAPRA.getActive().enqueueCommand(new BrowserOpenWindowCommand("http://"+hostname+":"+hostport+"/servletFactura","",""));
        return;
    }
    
 /*
    Abono y Adeudos de la Empresa
  */

    private TextField cantidad;
    private TextArea comentario;
    private Table listaPrincipal;
    private Button Registro,Reset,Eliminar,CerrarPantalla;

    private EmpresaMO emp=new EmpresaMO();
    private int OpcionFactura=0;
    ArrayList<Object> listaAbono=new ArrayList<Object>();
    public void habilitar(boolean opc){
        cantidad.setEnabled(opc);
        comentario.setEnabled(opc);
        listaPrincipal.setEnabled(opc);
        Registro.setEnabled(opc);
        Reset.setEnabled(opc);
        Eliminar.setEnabled(opc);

    }
    public void inicializacion(){


        cantidad=textLabels(80,9,true);
        comentario=new TextArea();
        comentario.setWidth(new Extent(300));
        comentario.setHeight(new Extent(50));
        Registro=new Button("REGISTRAR");
        Reset=new Button("LIMPIAR");
        Eliminar=new Button("ELIMINAR");
        CerrarPantalla=new Button("CERRAR");
        Registro.setBackground(Color.DARKGRAY);
        Registro.setForeground(Color.WHITE);
        Registro.setAlignment(Alignment.ALIGN_CENTER);
        Registro.setTextPosition(Alignment.ALIGN_CENTER);
        Reset.setBackground(Color.DARKGRAY);
        Reset.setForeground(Color.WHITE);
        Reset.setAlignment(Alignment.ALIGN_CENTER);
        Reset.setTextPosition(Alignment.ALIGN_CENTER);
        Registro.setBorder(new Border(2, Color.BLACK, 1));
        Reset.setBorder(new Border(2, Color.BLACK, 1));
        Eliminar.setBorder(new Border(2, Color.BLACK, 1));
        Eliminar.setBackground(Color.DARKGRAY);
        Eliminar.setForeground(Color.WHITE);
        Eliminar.setAlignment(Alignment.ALIGN_CENTER);
        Eliminar.setTextPosition(Alignment.ALIGN_CENTER);

        CerrarPantalla.setBorder(new Border(2, Color.BLACK, 1));
        CerrarPantalla.setBackground(Color.DARKGRAY);
        CerrarPantalla.setForeground(Color.WHITE);
        CerrarPantalla.setAlignment(Alignment.ALIGN_CENTER);
        CerrarPantalla.setTextPosition(Alignment.ALIGN_CENTER);
    }
    public ContentPane Posicion(){
        DAC_Ext ext=new DAC_Ext();
        Empresa em=dLogin.getEmpresa();
        inicializacion();
        
        Acciones();
        ContentPane abono=new ContentPane();
        String cadEmpresa="Empresa : "+em.getRazon_empresa();
        String cadPeriodo="Periodo : "+m_periodo.toString();
        Column col=new Column();
        Label lb1=new Label("Comentario");
        Label lb2=new Label(cadEmpresa);
        Label lb3=new Label(cadPeriodo);
        Row linea1=new Row();
        Row linea2=new Row();
        Row linea4=new Row();
        Row linea5=new Row();
        Row linea6=new Row();
        Row linea7=new Row();//tabla
        Row linea8=new Row();//Boton Eliminar
        try {

            Row linea3=rowTextField("Cantidad: ",2,cantidad,2);
            linea1.add(lb2);
            linea2.add(lb3);
            linea4.add(lb1);
            linea5.add(comentario);

            linea1.setAlignment(Alignment.ALIGN_LEFT);
            linea2.setAlignment(Alignment.ALIGN_LEFT);
            linea4.setAlignment(Alignment.ALIGN_LEFT);
            linea6.add(Registro);
            linea6.add(Reset);
            linea6.setCellSpacing(new Extent(10));

            listaPrincipal=new Table();
            listaPrincipal.setModel(modeloTabla());
            listaPrincipal.setWidth(new Extent(700));
            listaPrincipal.setInsets(new Insets(10));
            listaPrincipal.setDefaultHeaderRenderer(new HeaderTable());
            listaPrincipal.setDefaultRenderer(Object.class, new TableCell());
            listaPrincipal.setFont(new Font(Font.ARIAL,1,new Extent(11)));
            listaPrincipal.setSelectionEnabled(true);
            listaPrincipal.setSelectionFont(new Font(Font.ARIAL,1, new Extent(8)));
            listaPrincipal.setSelectionBackground(new Color(220,20,60));
            listaPrincipal.setSelectionForeground(Color.WHITE);
            listaPrincipal.setRolloverEnabled(true);
            listaPrincipal.setRolloverBackground(new Color(240,128,128));
            listaPrincipal.setRolloverForeground(Color.WHITE);

            linea7.add(listaPrincipal);

            linea8.add(Eliminar);
            linea8.add(CerrarPantalla);
            linea8.setCellSpacing(new Extent(10));

            col.add(linea1);
            col.add(linea2);
            col.add(linea3);
            col.add(linea4);
            col.add(linea5);
            col.add(linea6);
            col.add(linea7);
            col.add(linea8);
            col.setInsets(new Insets(25));

            abono.add(col);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return abono;
    }

    public DefaultTableModel modeloTabla(){
        DAC_Ext ext=new DAC_Ext();
        Object[] o=new Object[4];
        DefaultTableModel dtm=new DefaultTableModel(4,0);
        String title[]={"Id","Usuario","Cantidad","Comentario"};

       for(int i=0;i<title.length;i++){
           dtm.setColumnName(i,title[i]);
       }
        Empresa em=dLogin.getEmpresa();
        listaAbono=ext.selectAbono(OpcionFactura,em.getEmpresaId(),m_periodo.index);
        for(int i=0;i<listaAbono.size();i++){
                         o=new Object[4];
                         o=(Object[])listaAbono.get(i);
                         dtm.addRow(o);
              }
        return dtm;
    }
    public void Acciones(){
        try {
            Reset.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    cantidad.setText("");
                    comentario.setText("");
                }
            });

            Registro.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    DAC_Insert di=new DAC_Insert();
                    try {
                        DecimalFormat formateador = new DecimalFormat ("#####.##");
                        double pago=Double.parseDouble(cantidad.getText());
                        cantidad.setText(formateador.format(pago));
                        pago=Double.parseDouble(formateador.format(pago));
                        if(comentario.getText().trim().equals("")){
                            add(new Aviso("ADVERTENCIA","Favor de Escribir algun Comentario"));
                            return;
                        }
                        Empresa em=dLogin.getEmpresa();
                        Abono_AdeudoMO mo=new Abono_AdeudoMO();
                        mo.setUsuarioId(m_usuario.id);
                        mo.setFk_empresaId(em.getEmpresaId());
                        mo.setFk_periodoId(m_periodo.index);
                        mo.setCantidad(pago);
                        mo.setComentarios(comentario.getText());

                        di.insertCompuesta(OpcionFactura, mo);

                        cantidad.setText("");
                        comentario.setText("");
                        listaPrincipal.setModel(modeloTabla());
                    } catch (Exception e2) {
                        add(new Aviso("ADVERTENCIA","Cantidad Invalida"));
                        return;
                    }

                }
            });

            CerrarPantalla.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    universal.userClose();
                    universalOpc=0;
                    UpdateView(false);
                }
            });

            Eliminar.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    if(listaPrincipal.getSelectionModel().getMinSelectedIndex()!=-1){
                           DAC_Insert di=new DAC_Insert();
                           Object[] o=new Object[4];
                           o=(Object[])listaAbono.get(listaPrincipal.getSelectionModel().getMinSelectedIndex());
                           int id=Integer.parseInt(o[0].toString());
                           di.deleteCompuesta(OpcionFactura, id);
                           listaPrincipal.setModel(modeloTabla());
                    }
                    else{
                         add(new Aviso("ADVERTENCIA","FAVOR DE SELECCIONAR UN REGISTRO"));
                    }
                }
            });


        } catch (Exception e) {
            e.printStackTrace();


        }
    }

    public DBWRAP getPdb() {
        return pdb;
    }

    public void setPdb(DBWRAP pdb) {
        this.pdb = pdb;
    }
    
    public void permisoBoton(boolean value,String tipo){

        m_BtnDeducir.setEnabled(value);
        m_BtnEditar.setEnabled(value);
        m_BtnReport.setEnabled(value);
        m_BtnCancelar.setEnabled(value);
        m_BtnAjustar.setEnabled(value);

        m_BtnAjustar.setVisible(value);
        if(tipo.equals("A")){
                 m_BtnDeducir.setVisible(value);
                 m_BtnEditar.setVisible(value);
                 m_BtnReport.setVisible(value);
                 m_BtnCancelar.setVisible(true); 
        }else{
                m_BtnDeducir.setVisible(false);
                 m_BtnEditar.setVisible(false);
                 m_BtnReport.setVisible(false);
                 m_BtnCancelar.setVisible(false);

        }
    }
    public Row rowTextField(String title,int espacio,TextField tFld,int Insts){
        Row r=new Row();
        Label l=new Label(title);
        l.setFont(new nextapp.echo2.app.Font(Font.ARIAL, 1, new Extent(12)));
        tFld.setFont(new nextapp.echo2.app.Font(Font.ARIAL, 1, new Extent(12)));

        r.setInsets(new Insets(Insts));
        r.setCellSpacing(new Extent(espacio));
        r.add(l);
        r.add(tFld);
        r.setAlignment(Alignment.ALIGN_LEFT);
        return r;
    }

     public Row rowButton(String title,String titulo,Button but){
            Row r=new Row();
            Label l=new Label(title);
            l.setFont(new nextapp.echo2.app.Font(Font.ARIAL, 1, new Extent(12)));
            l.setForeground(Color.BLACK);
            but.setText(titulo);
            but.setWidth(new Extent(130));
            but.setBackground(Color.DARKGRAY);
            but.setForeground(Color.WHITE);
            but.setAlignment(Alignment.ALIGN_CENTER);
            r.add(l);
            r.add(but);
            return r;
    }

     public TextField textLabels(int largo,int longitud,boolean habilitado){
        TextField txt=new TextField();
        txt.setFont(new nextapp.echo2.app.Font(Font.ARIAL, 1, new Extent(12)));
        txt.setWidth(new Extent(largo,Extent.PX));
        txt.setMaximumLength(longitud);
        txt.setEnabled(habilitado);
        txt.setAlignment(Alignment.ALIGN_LEFT);
        //txt.setBorder(new nextapp.echo2.app.Border(2, Color.BLACK, 2));
        txt.setHeight(new Extent(15));
        return txt;
    }

}class HeaderTable extends DefaultTableCellRenderer implements TableCellRenderer{

@Override
    public Component getTableCellRendererComponent(Table table,Object value,int column,int row){

        Label label=new Label(value.toString());
        TableLayoutData tld=new TableLayoutData();
        tld.setBackground(new Color(178,34,34));
        label.setForeground(Color.WHITE);
        label.setLayoutData(tld);
        label.setFont(new Font(Font.ARIAL, 1, new Extent(13)));

        return label;
    }
}

class TableCell extends DefaultTableCellRenderer implements TableCellRenderer{

@Override
    public Component getTableCellRendererComponent(Table table,Object value,int column,int row){

        String txt="";
        if(value!=null)
            txt=value.toString();
        Label label=new Label(txt);
        TableLayoutData tld=new TableLayoutData();
        if(row%2==0)
            tld.setBackground(Color.WHITE);//175 238 238
        else
            tld.setBackground(new Color(175,238,238));//175 238 238
        label.setForeground(Color.BLACK);
        label.setLayoutData(tld);
        label.setFont(new Font(Font.ARIAL, 1, new Extent(11)));
        return label;
    }

}